Introduction: Mapping
of broad research field around Twin Transitions (Digital &
Sustainable)
Here are preliminary results of the bibliometric mapping of the
research field. Its purpose is:
- To map the broader research community and distinct research field
the department contributes to.
- Identify core knowledge bases, research areas trends and
topics.
- Highlight the positioning of the department within this
dynamics.
The method for the research-field-mapping can be reviewed here:
Rakas, M.,
& Hain, D. S. (2019). The state of innovation system research: What
happens beneath the surface?. Research Policy, 48(9), 103787.
Note: The analysis in this document depicts the
larger research field around the department, thereby all
analysis results are based on the publications of the department plus
related.
Seed articles
- The methodology takes a set of self-selected seed articles as point
of departure.
- For every of these seed articles, the 2000 articles with the highest
bibliographic coupling are extracted. ’ They jointly represent the
larger research field.
- The following seedds are used in this analysis
Converting your scopus collection into a bibliographic dataframe
Done!
Generating affiliation field tag AU_UN from C1: Done!
General Overview over
the research field
Note: This section provides basic descriptives of th
identified research fielld, including number of articles over time,
countries, institutions, and authors. See
Technical descriptionfor additional explanations.
Main Indicators:
Publications, Authors, Countries
MAIN INFORMATION ABOUT DATA
Timespan 1979 : 2023
Sources (Journals, Books, etc) 706
Documents 2751
Annual Growth Rate % 4.16
Document Average Age 7.65
Average citations per doc 126.7
Average citations per year per doc 17.11
References 162042
DOCUMENT TYPES
13
article 2680
book chapter 2
conference paper 12
editorial 2
note 2
review 33
short survey 7
DOCUMENT CONTENTS
Keywords Plus (ID) 8460
Author's Keywords (DE) 6004
AUTHORS
Authors 6247
Author Appearances 8620
Authors of single-authored docs 362
AUTHORS COLLABORATION
Single-authored docs 443
Documents per Author 0.44
Co-Authors per Doc 3.13
International co-authorships % 33.33
Annual Scientific Production
Annual Percentage Growth Rate 4.16
Most Productive Authors
Top manuscripts per citations
Corresponding Author's Countries
SCP: Single Country Publications
MCP: Multiple Country Publications
Total Citations per Country
Most Relevant Sources
Most Relevant Keywords
NA
Main institutions,
journals, keywords
Topic modelling
Note: Here, we report the results of a BERTYopic
topic-modelling (basically, clustering on words) on all title+abstract
texts. Identified topics can be interpreted as broad themes in the
research field. See Technical descriptionfor additional
explanations.
Error in `count()`:
! Must group by variables found in `.data`.
✖ Column `label` is not found.
Backtrace:
1. ... %>% ...
13. dplyr:::count.data.frame(., PY, label, name = "weight")
Automated (LMM)
summary
Works a bit less precise, since it only has titles and no
abstracts
Knowledge Bases:
Co-Citation network analysis
Note: This analysis refers the co-citation analysis,
where the cited references and not the original publications are the
unit of analysis. Identified knowledge bases can be interpreted as the
knowledge foundation the field draws from. See
Technical descriptionfor additional explanations.
Development
Publications per
cluster
Automated (LMM)
summary
Works a bit less precise, since it only has titles and no
abstracts
Research Areas:
Bibliographic coupling analysis
Note: This analysis refers the bibliographic
coupling analysis, where original publications are the unit of analysis.
Identified research areas can be interpreted as the field’s current
research frontier. See Technical descriptionfor additional
explanations.
Development
Publications by
cluster
Automated (LMM)
summary
Further Analysis
Overal interplay
Knowledge Bases,
Research Areas & Topics Interaction
Joint Overview over
Knowledge Bases, Research Areas, and Topics
This plot shows the connection of publications in the research areas
to knowledge bases (by citations) and topics (by gamma, document-topic
weight)
Collaboration
Collaboration
network
Endnotes
LS0tCnRpdGxlOiAnRmllbGQgTWFwcGluZyBvZiBLbm93bGVkZ2UgU3RydWN0dXJlJwphdXRob3I6ICJEYW5pZWwgUy4gSGFpbiIKZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJWQgJUIsICVZJylgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogbm8KICAgIHRvY19kZXB0aDogJzMnCiAgICBkZl9wcmludDogcGFnZWQKICBodG1sX25vdGVib29rOgogICAgdGhlbWU6IGZsYXRseQogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBkZl9wcmludDogcGFnZWQKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0b2M6IG5vCiAgICB0b2NfZGVwdGg6IDMKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBubwpwYXJhbXM6CiAgaW5zdGl0dXRlOgogICAgdmFsdWU6IG51bGwKICBkZXBhcnRtZW50OgogICAgdmFsdWU6IG51bGwKLS0tCgo8IS0tLQojIEFkZCB0byBZQU1MIHdoZW4gY29tcGlsaW5nIGh0bWwgLS08IHdoZW4gcmV2aWV3aW5nIGNoYW5nZSBmaXJzdCBsaW5lIHRvOiBodG1sX25vdGVib29rCiAgaHRtbF9kb2N1bWVudDoKICAgIHRoZW1lOiBmbGF0bHkKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIHRvYzogZmFsc2UKICAgIHRvY19kZXB0aDogMwogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IGZhbHNlCgojIEFkZCB3aGVuIGNvbXBpbGluZyBwZGYKIyBBZGQgdG8gWUFNTCB3aGVuIGNvbXBpbGluZyBodG1sCiAgIGJvb2tkb3duOjpwZGZfZG9jdW1lbnQyOiAKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIGdsb2JhbF9udW1iZXJpbmc6IHRydWUKLS0tPgoKCmBgYHs9aHRtbH0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLm1haW4tY29udGFpbmVyIHsKICBtYXgtd2lkdGg6IDEyMDBweDsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBtYXJnaW4tcmlnaHQ6IGF1dG87Cn0KPC9zdHlsZT4KYGBgCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KIyMjIEdlbmVyaWMgcHJlYW1ibGUKI3JtKGxpc3Q9bHMoKSkKU3lzLnNldGVudihMQU5HID0gImVuIikKb3B0aW9ucyhzY2lwZW4gPSA1KQoKc2V0LnNlZWQoMTMzNykKCiMjIyBMb2FkIHBhY2thZ2VzICAKIyBnZW5lcmFsCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KG1hZ3JpdHRyKQpsaWJyYXJ5KHdpZHlyKQoKIyBLaWJsaW8gJiBOVwpsaWJyYXJ5KGJpYmxpb21ldHJpeCkKbGlicmFyeSh0aWR5Z3JhcGgpCmxpYnJhcnkoZ2dyYXBoKQpsaWJyYXJ5KGlncmFwaCkKCiMgTkxQCmxpYnJhcnkodGlkeXRleHQpCgojIERhdGF2aXoKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoZ2dmb3JjZSkKbGlicmFyeShnZ3JlcGVsKQpsaWJyYXJ5KHBhdGNod29yaykKCiMgS25pdApsaWJyYXJ5KGtuaXRyKSAjIEZvciBkaXNwbGF5IG9mIHRoZSBtYXJrZG93bgpsaWJyYXJ5KGthYmxlRXh0cmEpICMgRm9yIHRhYmxlIHN0eWxpbmcKCiMgb3duIGZ1bmN0aW9ucwpzb3VyY2UoIi4uL2Z1bmN0aW9ucy9mdW5jdGlvbnNfYmFzaWMuUiIpCnNvdXJjZSgiLi4vZnVuY3Rpb25zL2Z1bmN0aW9uc19zdW1tYXJ5LlIiKQpzb3VyY2UoIi4uL2Z1bmN0aW9ucy8wMF9wYXJhbWV0ZXJzLlIiKQoKIyBLbml0ciBvcHRpb25zCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSkKYGBgCgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkVYVCBQQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KIyBXaGVuIGRvaW5nIGl0IGhlcmUgaW4gdGhlIG5vdGVib29rCnZhcl9pbnN0IDwtICdUVCcKdmFyX2RlcHQgPC0gJ3YxJwp2YXJfbGFiZWwgPC0gJ1R3aW4gVHJhbnNpdGlvbnMgKERpZ2l0YWwgJiBTdXN0YWluYWJsZSknCgojIFdoZW4gY2FsbGluZyBmcm9tIGEgaGlnaGVydCBsZXZlbCBzY3JpcHQKI3Zhcl9pbnN0IDwtIHBhcmFtcyRpbnN0aXR1dGUKI3Zhcl9kZXB0IDwtIHBhcmFtcyRkZXBhcnRtZW50CmBgYAoKIyBJbnRyb2R1Y3Rpb246IE1hcHBpbmcgb2YgYnJvYWQgcmVzZWFyY2ggZmllbGQgYXJvdW5kIGByIHZhcl9sYWJlbGAKCkhlcmUgYXJlIHByZWxpbWluYXJ5IHJlc3VsdHMgb2YgdGhlIGJpYmxpb21ldHJpYyBtYXBwaW5nIG9mIHRoZSByZXNlYXJjaCBmaWVsZC4gSXRzIHB1cnBvc2UgaXM6CgoqIFRvIG1hcCB0aGUgYnJvYWRlciByZXNlYXJjaCBjb21tdW5pdHkgYW5kIGRpc3RpbmN0IHJlc2VhcmNoIGZpZWxkIHRoZSBkZXBhcnRtZW50IGNvbnRyaWJ1dGVzIHRvLgoqIElkZW50aWZ5IGNvcmUga25vd2xlZGdlIGJhc2VzLCByZXNlYXJjaCBhcmVhcyB0cmVuZHMgYW5kIHRvcGljcy4KKiBIaWdobGlnaHQgdGhlIHBvc2l0aW9uaW5nIG9mIHRoZSBkZXBhcnRtZW50IHdpdGhpbiB0aGlzIGR5bmFtaWNzLgoKVGhlIG1ldGhvZCBmb3IgdGhlIHJlc2VhcmNoLWZpZWxkLW1hcHBpbmcgY2FuIGJlIHJldmlld2VkIGhlcmU6CgpbUmFrYXMsIE0uLCAmIEhhaW4sIEQuIFMuICgyMDE5KS4gVGhlIHN0YXRlIG9mIGlubm92YXRpb24gc3lzdGVtIHJlc2VhcmNoOiBXaGF0IGhhcHBlbnMgYmVuZWF0aCB0aGUgc3VyZmFjZT8uIFJlc2VhcmNoIFBvbGljeSwgNDgoOSksIDEwMzc4Ny5dKGh0dHBzOi8vZG9pLm9yZy8xMC4xMDE2L2oucmVzcG9sLjIwMTkuMDQuMDExKQoKKipOb3RlOioqIFRoZSBhbmFseXNpcyBpbiB0aGlzIGRvY3VtZW50IGRlcGljdHMgdGhlICpsYXJnZXIgcmVzZWFyY2ggZmllbGQqIGFyb3VuZCB0aGUgZGVwYXJ0bWVudCwgdGhlcmVieSBhbGwgYW5hbHlzaXMgcmVzdWx0cyBhcmUgYmFzZWQgb24gdGhlIHB1YmxpY2F0aW9ucyBvZiB0aGUgZGVwYXJ0bWVudCBwbHVzIHJlbGF0ZWQuCgojIyBTZWVkIGFydGljbGVzCgoqIFRoZSBtZXRob2RvbG9neSB0YWtlcyBhIHNldCBvZiBzZWxmLXNlbGVjdGVkIHNlZWQgYXJ0aWNsZXMgYXMgcG9pbnQgb2YgZGVwYXJ0dXJlLiAKKiBGb3IgZXZlcnkgb2YgdGhlc2Ugc2VlZCBhcnRpY2xlcywgdGhlIDIwMDAgYXJ0aWNsZXMgd2l0aCB0aGUgaGlnaGVzdCBiaWJsaW9ncmFwaGljIGNvdXBsaW5nIGFyZSBleHRyYWN0ZWQuCicgVGhleSBqb2ludGx5IHJlcHJlc2VudCB0aGUgbGFyZ2VyIHJlc2VhcmNoIGZpZWxkLgoqIFRoZSBmb2xsb3dpbmcgc2VlZGRzIGFyZSB1c2VkIGluIHRoaXMgYW5hbHlzaXMKCmBgYHtyfQpjb252ZXJ0MmRmKGZpbGUgPSAnLi4vZGF0YS9zY29wdXNfMDAuY3N2JywgZGJzb3VyY2UgPSAic2NvcHVzIiwgZm9ybWF0ID0gImNzdiIpICU+JSBhc190aWJibGUoKSAlPiUgc2VsZWN0KEFVLCBQWSwgVEksIFNPKQpgYGAKCjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBORVhUIFBBUlQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIExvYWQgZGF0YQpNIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL01fJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAlPiUgYXNfdGliYmxlKCkgJT4lIAogIGRpc3RpbmN0KFVULCAua2VlcF9hbGwgPSBUUlVFKSAlPiUgCiAgZmlsdGVyKFBZID49IFBZX21pbiwgUFkgPD0gUFlfbWF4KSAlPiUKICBncm91cF9ieShQWSkgJT4lCiAgICBtdXRhdGUoVENfY29ob3J0X3JhbmsgPSBwZXJjZW50X3JhbmsoVEMpKSAlPiUKICB1bmdyb3VwKCkgCmBgYAoKYGBge3J9CiNjb21fbGFiZWxzIDwtIHRpYmJsZShjb20gPSBOQSwgbGFiZWwgPSBOQSwgdHlwZSA9IE5BKQoKY29tX2xhYmVscyA8LSByZWFkX2NzdjIoJy4uL2RhdGEvY29tbXVuaXR5X2xhYmVsaW5nLmNzdicpICU+JSAKICBhcnJhbmdlKGNvbSkgJT4lCiAgI2ZpbHRlcihpbnN0aXR1dGUgPT0gdmFyX2luc3QsIGRlcGFydG1lbnQgPT0gdmFyX2RlcHQpICU+JSBhcnJhbmdlKGluc3RpdHV0ZSwgZGVwYXJ0bWVudCwgdHlwZSwgY29tKSAlPiUKICBtdXRhdGUobGFiZWwgPSBpZmVsc2UoaXMubmEobGFiZWwpLCBwYXN0ZTAodHlwZSwgJyAnLCBjb20sICc6IHVubGFiZWxlZCcpLCBwYXN0ZTAodHlwZSwgJyAnLCBjb20sICc6ICcsIGxhYmVsKSkpCmBgYAoKIyBHZW5lcmFsIE92ZXJ2aWV3IG92ZXIgdGhlIHJlc2VhcmNoIGZpZWxkCgoqKk5vdGU6KiogVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGJhc2ljIGRlc2NyaXB0aXZlcyBvZiB0aCBpZGVudGlmaWVkIHJlc2VhcmNoIGZpZWxsZCwgaW5jbHVkaW5nIG51bWJlciBvZiBhcnRpY2xlcyBvdmVyIHRpbWUsIGNvdW50cmllcywgaW5zdGl0dXRpb25zLCBhbmQgYXV0aG9ycy4gU2VlIGBUZWNobmljYWwgZGVzY3JpcHRpb25gZm9yIGFkZGl0aW9uYWwgZXhwbGFuYXRpb25zLgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CiMgcmVzdWx0cyA8LSBiaWJsaW9BbmFseXNpcyhNLCBzZXAgPSAiOyIpCnJlc3VsdHMgPC0gcmVhZF9yZHMocGFzdGUwKCcuLi8uLi90ZW1wL01fcmVzXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgojIyBNYWluIEluZGljYXRvcnM6IFB1YmxpY2F0aW9ucywgQXV0aG9ycywgQ291bnRyaWVzIAoKYGBge3J9CnJlc3VsdHMgJT4lIHN1bW1hcnkoKQpgYGAKCmBgYHtyfQojcHJvZF9BVSA8LSBNICU+JSBhdXRob3JQcm9kT3ZlclRpbWUoayA9IDEwLCBncmFwaCA9IFRSVUUpCiNwbG90KHByb2RfQVUkZ3JhcGgpCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CnJtKHJlc3VsdHMsIHByb2RfQVUpCmBgYAoKIyMgTWFpbiBpbnN0aXR1dGlvbnMsIGpvdXJuYWxzLCBrZXl3b3JkcwoKYGBge3IsIGZpZy53aWR0aD0xNy41LCBmaWcuaGVpZ2h0PTE3LjV9CiMgIyBpbnN0aXR1dGlvbnMsIGtleXdvcmRzLCBjaXRhdGlvbnMKTV90aHJlZWZpZWxkIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL3RocmVlZmllbGRfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAKTV90aHJlZWZpZWxkCmBgYAoKCjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBORVhUIFBBUlQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KCiMgVG9waWMgbW9kZWxsaW5nIAoKKipOb3RlOioqIEhlcmUsIHdlIHJlcG9ydCB0aGUgcmVzdWx0cyBvZiBhIEJFUlRZb3BpYyB0b3BpYy1tb2RlbGxpbmcgKGJhc2ljYWxseSwgY2x1c3RlcmluZyBvbiB3b3Jkcykgb24gYWxsIHRpdGxlK2Fic3RyYWN0IHRleHRzLiBJZGVudGlmaWVkIHRvcGljcyBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgYnJvYWQgdGhlbWVzIGluIHRoZSByZXNlYXJjaCBmaWVsZC4gU2VlIGBUZWNobmljYWwgZGVzY3JpcHRpb25gZm9yIGFkZGl0aW9uYWwgZXhwbGFuYXRpb25zLgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9Ck1fdG9wIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL01fdG9wXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KY29tX25hbWVzX3RvcCA8LSB0aWJibGUoIAogIGNvbSA9IDE6KE1fdG9wICU+JSBwdWxsKGNvbSkgJT4lIG5fZGlzdGluY3QoKSksCiAgdHlwZSA9ICdUUCcsCiAgY29sID0gY29tICU+JSBnZ19jb2xvcl9zZWxlY3QocGFsID0gcGFsX3RwKSkgJT4lCiAgbGVmdF9qb2luKGNvbV9sYWJlbHMgJT4lIGZpbHRlcih0eXBlID09ICdUUCcpICU+JSBzZWxlY3QoY29tLCBsYWJlbCksIGJ5ID0gJ2NvbScpICU+JQogIG11dGF0ZShsYWJlbCA9IGlmZWxzZShpcy5uYShsYWJlbCksIHBhc3RlMCgnVFAgJywgY29tLCAnOiB1bmxhYmVsZWQnKSwgbGFiZWwpKQogICAgICAgICAgICAKIyAjIDFzdCBhbHRlcm5hdGl2ZTogTnVtYmVyIHRoZW0gMS1uCiMgcGFzdGUodHlwZSwgMToodGV4dF9sZGFfZ2FtbWEgJT4lIHB1bGwodG9waWMpICU+JSBuX2Rpc3RpbmN0KCkpKSAgICAgICAgICAgCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9Ck1fdG9wICU8PiUgIGlubmVyX2pvaW4oY29tX25hbWVzX3RvcCAlPiUgc2VsZWN0KGNvbSwgbGFiZWwsIGNvbCksIGJ5ID0gJ2NvbScpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDE1LCBmaWcuaGVpZ2h0PTcuNX0KTV90b3AgJT4lCiAgbXV0YXRlKFBZID0gYXMubnVtZXJpYyhQWSkpICU+JQogIGNvdW50KFBZLCBsYWJlbCwgbmFtZSA9ICd3ZWlnaHQnKSAlPiUKICBncm91cF9ieShQWSkgJT4lIG11dGF0ZSh3ZWlnaHRfUFkgPSBzdW0od2VpZ2h0KSkgJT4lIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUod2VpZ2h0X3JlbCA9IHdlaWdodCAvIHdlaWdodF9QWSkgJT4lCiAgc2VsZWN0KFBZLCBsYWJlbCwgd2VpZ2h0LCB3ZWlnaHRfcmVsKSAlPiUKICBmaWx0ZXIoUFkgPj0gUFlfbWluICYgUFkgPD0gUFlfbWF4KSAlPiUKICBhcnJhbmdlKFBZLCBsYWJlbCkgJT4lCiAgcGxvdF9zdW1tYXJ5X3RpbWVsaW5lKHkxID0gd2VpZ2h0LCB5MiA9IHdlaWdodF9yZWwsIHQgPSBQWSwgdF9taW4gPSBQWV9taW4sIHRfbWF4ID0gUFlfbWF4LCBieSA9IGxhYmVsLCAgbGFiZWwgPSBUUlVFLCBwYWwgPSBwYWxfdHAsIAogICAgICAgICAgICAgICAgICAgICAgICB5MV90ZXh0ID0gIlRvcGljIHBvcHVsYXJpdHkgYW5udWFseSIsIHkyX3RleHQgPSAiU2hhcmUgb2YgdG9waWMgYW5udWFsbHkiKSArCiAgcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gcGFzdGUoJ1RvcGljIE1vZGVsbGluZzonLCB2YXJfaW5zdCwgJ0ZpZWxkIGFyb3VuZCcsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlKCdUaW1lZnJhbWU6JywgUFlfbWluLCAnLScsIFBZX21heCAsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAnQWJzb2x1dGUgdG9waWMgYXBwZWFyYW5jZSAobGVmdCksIFJlbGF0aXZlIHRvcGljIGFwcGVhcmFuY2UgKHJpZ2h0KScpCmBgYAoKIyMgQXV0b21hdGVkIChMTU0pIHN1bW1hcnkgCgpXb3JrcyBhIGJpdCBsZXNzIHByZWNpc2UsIHNpbmNlIGl0IG9ubHkgaGFzIHRpdGxlcyBhbmQgbm8gYWJzdHJhY3RzCgpgYGB7cn0KY29tX2xhYmVsc19UUCA8LSBjb21fbGFiZWxzICU+JSBmaWx0ZXIodHlwZSA9PSAnVFAnKSAlPiUKICBtdXRhdGUobGFiZWwgPSBsYWJlbCAlPiUgc3RyX3JlcGxhY2UoJyYnLCAnYW5kJykpICU+JQogIG11dGF0ZShkZXNjcmlwdGlvbiA9IAlkZXNjcmlwdGlvbiAlPiUgc3RyX3JlcGxhY2UoJyYnLCAnYW5kJykpCgpmb3IgKGkgaW4gMTpucm93KGNvbV9sYWJlbHNfVFApKSB7I2k9MQogIGNvbV9sYWJlbHNfbiA8LSBjb21fbGFiZWxzX1RQW2ksXQogIHdyaXRlTGluZXMocGFzdGUoJ0xhYmVsOicsIGNvbV9sYWJlbHNfbiRsYWJlbCwgJyBcbiAnLAogICAgICAgICdEZXNjcmlwdGlvbjonLCBjb21fbGFiZWxzX24kZGVzY3JpcHRpb24sICcgXG4gXG4gJywKICAgICAgICBjb2xsYXBzZSA9ICcgJykpCn0KYGBgCgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkVYVCBQQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CgojIEtub3dsZWRnZSBCYXNlczogQ28tQ2l0YXRpb24gbmV0d29yayBhbmFseXNpcyAKCioqTm90ZToqKiBUaGlzIGFuYWx5c2lzIHJlZmVycyB0aGUgY28tY2l0YXRpb24gYW5hbHlzaXMsIHdoZXJlIHRoZSBjaXRlZCByZWZlcmVuY2VzIGFuZCBub3QgdGhlIG9yaWdpbmFsIHB1YmxpY2F0aW9ucyBhcmUgdGhlIHVuaXQgb2YgYW5hbHlzaXMuIElkZW50aWZpZWQga25vd2xlZGdlIGJhc2VzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUga25vd2xlZGdlIGZvdW5kYXRpb24gdGhlIGZpZWxkIGRyYXdzIGZyb20uIFNlZSBgVGVjaG5pY2FsIGRlc2NyaXB0aW9uYGZvciBhZGRpdGlvbmFsIGV4cGxhbmF0aW9ucy4KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpDX253IDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL0NfbndfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAgJT4lCiAgZHJvcF9uYShjb20pCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmNvbV9uYW1lc19jaXQgPC0gdGliYmxlKCAKICBjb20gPSAxOihDX253ICU+JSBwdWxsKGNvbSkgJT4lIG5fZGlzdGluY3QoKSksCiAgdHlwZSA9ICdLQicsCiAgY29sID0gY29tICU+JSBnZ19jb2xvcl9zZWxlY3QocGFsID0gcGFsX2tiKSkgJT4lCiAgbGVmdF9qb2luKGNvbV9sYWJlbHMgJT4lIGZpbHRlcih0eXBlID09ICdLQicpICU+JSBzZWxlY3QoY29tLCBsYWJlbCksIGJ5ID0gJ2NvbScpICU+JQogIG11dGF0ZShsYWJlbCA9IGlmZWxzZShpcy5uYShsYWJlbCksIHBhc3RlMCgnS0IgJywgY29tLCAnOiB1bmxhYmVsZWQnKSwgbGFiZWwpKQoKIyAjIDFzdCBhbHRlcm5hdGl2ZTogTnVtYmVyIHRoZW0gMS1uCiMgcGFzdGUodHlwZSwgMTooQ19udyAlPiUgcHVsbChjb20pICU+JSBuX2Rpc3RpbmN0KCkpKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpDX253ICU8PiUgbGVmdF9qb2luKGNvbV9uYW1lc19jaXQgJT4lIHNlbGVjdChjb20sIGxhYmVsLCBjb2wpLCBieSA9ICJjb20iKQpgYGAKCiMjIERldmVsb3BtZW50CgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KZWxfMm0gPC0gcmVhZFJEUyhwYXN0ZTAoJy4uLy4uL3RlbXAvZWxfMm1fJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAlPiUKICBkcm9wX25hKCkKYGBgCgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmNpdF9jb21feWVhciA8LSBlbF8ybSAlPiUKICBjb3VudChjb21fY2l0LCBQWSwgbmFtZSA9ICdUQycpICU+JQogIGdyb3VwX2J5KFBZKSAlPiUKICBtdXRhdGUoVENfcmVsID0gVEMgLyBzdW0oVEMpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgYXJyYW5nZShQWSwgY29tX2NpdCkgJT4lCiAgbGVmdF9qb2luKGNvbV9uYW1lc19jaXQgLCBieSA9IGMoJ2NvbV9jaXQnID0gJ2NvbScpKSAlPiUgCiAgY29tcGxldGUobGFiZWwsIFBZLCBmaWxsID0gbGlzdChUQyA9IDAsIFRDX3JlbCA9IDApKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAxNSwgZmlnLmhlaWdodD03LjV9CmNpdF9jb21feWVhciAlPiUKICBwbG90X3N1bW1hcnlfdGltZWxpbmUoeTEgPSBUQywgeTIgPSBUQ19yZWwsIHQgPSBQWSwgdF9taW4gPSBQWV9taW4sIHRfbWF4ID0gUFlfbWF4LCBieSA9IGxhYmVsLCBwYWwgPSBwYWxfa2IsIGxhYmVsID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgeTFfdGV4dCA9ICJOdW1iZXIgY2l0YXRpb25zIHJlY2lldmVkIGFubnVhbGx5IiwgIHkyX3RleHQgPSAiU2hhcmUgb2YgY2l0YXRpb25zIHJlY2lldmVkIGFubnVhbGx5IikgKwogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9IHBhc3RlKCdLbm93bGVkZ2UgQmFzZXM6JywgdmFyX2luc3QsICdGaWVsZCBhcm91bmQgRGVwdC4nLCB2YXJfZGVwdCwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBwYXN0ZSgnVGltZWZyYW1lOicsIFBZX21pbiwgJy0nLCBQWV9tYXggLCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBjYXB0aW9uID0gJ0Fic29sdXRlIGtub3dsZWRnZSBiYXNlIGFwcGVhcmFuY2UgKGxlZnQpLCBSZWxhdGl2ZSBrbm93bGVkZ2UgYmFzZSBhcHBlYXJhbmNlIChyaWdodCknKQpgYGAKCiMjIFB1YmxpY2F0aW9ucyBwZXIgY2x1c3RlcgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmtiX3N0YXRzIDwtIENfbncgJT4lCiAgZ3JvdXBfYnkobGFiZWwpICU+JQogIHN1bW1hcmlzZShuID0gbigpLCBkZW5zaXR5X2ludCA9ICgoc3VtKGRncl9pbnQpIC8gKG4oKSAqIChuKCkgLSAxKSkpICogMTAwKSAlPiUgcm91bmQoMykpICU+JQogIHJlbG9jYXRlKGxhYmVsLCBldmVyeXRoaW5nKCkpCmBgYAoKYGBge3J9CmtiX3N1bSA8LUNfbncgJT4lIGdyb3VwX2J5KGNvbSkgJT4lIAogIGFycmFuZ2UoY29tLCBkZXNjKGRncl9pbnQpKSAlPiUKICBtdXRhdGUobmFtZSA9IG5hbWUgJT4lIHN0cl90cnVuYygxNTApKSAlPiUKICBzbGljZV9tYXgob3JkZXJfYnkgPSBkZ3JfaW50LCBuID0gMTAsIHdpdGhfdGllcyA9IEZBTFNFKSAlPiUgCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCggbmFtZSwgZGdyX2ludCwgZGdyKSAlPiUKICBrYWJsZSgpIAoKZm9yKGkgaW4gMTpucm93KGNvbV9uYW1lc19jaXQpKXsKICBrYl9zdW0gPC0ga2Jfc3VtICU+JQogICAgcGFja19yb3dzKHBhc3RlMCgnS25vd2xlZGdlIEJhc2UgJywgaSwgJzogJywgY29tX25hbWVzX2NpdFtpLCAnbGFiZWwnXSwKICAgICAgICAgICAgICAgICAgICAgJyAgIChuID0gJywga2Jfc3RhdHNbaSwgJ24nXSwgJywgZGVuc2l0eSA9Jywga2Jfc3RhdHNbaSwgJ2RlbnNpdHlfaW50J10gJT4lIHJvdW5kKDIpLCAnKScgKSwgCiAgICAgICAgICAgICAgKGkqMTAtOSksICAoaSoxMCksIGxhYmVsX3Jvd19jc3MgPSAiYmFja2dyb3VuZC1jb2xvcjogIzY2NjsgY29sb3I6ICNmZmY7IikgCiAgfQoKa2Jfc3VtICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIGZvbnRfc2l6ZSA9IDEwKQpgYGAKCiMjIEF1dG9tYXRlZCAoTE1NKSBzdW1tYXJ5IAoKV29ya3MgYSBiaXQgbGVzcyBwcmVjaXNlLCBzaW5jZSBpdCBvbmx5IGhhcyB0aXRsZXMgYW5kIG5vIGFic3RyYWN0cwoKYGBge3J9CmNvbV9sYWJlbHNfS0IgPC0gY29tX2xhYmVscyAlPiUgZmlsdGVyKHR5cGUgPT0gJ0tCJykgJT4lCiAgbXV0YXRlKGxhYmVsID0gbGFiZWwgJT4lIHN0cl9yZXBsYWNlKCcmJywgJ2FuZCcpKSAlPiUKICBtdXRhdGUoZGVzY3JpcHRpb24gPSAJZGVzY3JpcHRpb24gJT4lIHN0cl9yZXBsYWNlKCcmJywgJ2FuZCcpKQoKZm9yIChpIGluIDE6bnJvdyhjb21fbGFiZWxzX0tCKSkgeyNpPTEKICBjb21fbGFiZWxzX24gPC0gY29tX2xhYmVsc19LQltpLF0KICB3cml0ZUxpbmVzKHBhc3RlKCdMYWJlbDonLCBjb21fbGFiZWxzX24kbGFiZWwsICcgXG4gJywKICAgICAgICAnRGVzY3JpcHRpb246JywgY29tX2xhYmVsc19uJGRlc2NyaXB0aW9uLCAnIFxuIFxuICcsCiAgICAgICAgY29sbGFwc2UgPSAnICcpKQp9CmBgYAoKPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE5FWFQgUEFSVCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgoKIyBSZXNlYXJjaCBBcmVhczogQmlibGlvZ3JhcGhpYyBjb3VwbGluZyBhbmFseXNpcwoKKipOb3RlOioqIFRoaXMgYW5hbHlzaXMgcmVmZXJzIHRoZSBiaWJsaW9ncmFwaGljIGNvdXBsaW5nIGFuYWx5c2lzLCB3aGVyZSBvcmlnaW5hbCBwdWJsaWNhdGlvbnMgYXJlIHRoZSB1bml0IG9mIGFuYWx5c2lzLiBJZGVudGlmaWVkIHJlc2VhcmNoIGFyZWFzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUgZmllbGQncyBjdXJyZW50IHJlc2VhcmNoIGZyb250aWVyLiBTZWUgYFRlY2huaWNhbCBkZXNjcmlwdGlvbmBmb3IgYWRkaXRpb25hbCBleHBsYW5hdGlvbnMuCgojIyBEZXZlbG9wbWVudAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9Ck1fYmliIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL01fYmliXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgJT4lIAogIGFzX3RpYmJsZSgpICU+JQogIGRyb3BfbmEoY29tKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpjb21fbmFtZXNfYmliIDwtIHRpYmJsZSggCiAgY29tID0gMTooTV9iaWIgJT4lIHB1bGwoY29tKSAlPiUgbl9kaXN0aW5jdCgpKSwKICB0eXBlID0gJ1JBJywKICBjb2wgPSBjb20gJT4lIGdnX2NvbG9yX3NlbGVjdChwYWwgPSBwYWxfcmEpKSAlPiUKICBsZWZ0X2pvaW4oY29tX2xhYmVscyAlPiUgZmlsdGVyKHR5cGUgPT0gJ1JBJykgJT4lIHNlbGVjdChjb20sIGxhYmVsKSwgYnkgPSAnY29tJykgJT4lCiAgbXV0YXRlKGxhYmVsID0gaWZlbHNlKGlzLm5hKGxhYmVsKSwgcGFzdGUwKCdSQSAnLCBjb20sICc6IHVubGFiZWxlZCcpLCBsYWJlbCkpCgojICMgMXN0IGFsdGVybmF0aXZlOiBOdW1iZXIgdGhlbSAxLW4KIyBwYXN0ZSh0eXBlLCAxOihNX2JpYiAlPiUgcHVsbChjb20pICU+JSBuX2Rpc3RpbmN0KCkpKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpNX2JpYiAlPD4lIGxlZnRfam9pbihjb21fbmFtZXNfYmliICU+JSBzZWxlY3QoY29tLCBsYWJlbCwgY29sKSwgYnkgPSAiY29tIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMTUsIGZpZy5oZWlnaHQ9Ny41fQpNX2JpYiAlPiUKICBtdXRhdGUoUFkgPSBQWSAlPiUgYXMubnVtZXJpYygpKSAlPiUKICBncm91cF9ieShsYWJlbCwgUFkpICU+JSBzdW1tYXJpc2UobiA9IG4oKSkgJT4lIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShQWSkgJT4lIG11dGF0ZShuX1BZID0gc3VtKG4pKSAlPiUgdW5ncm91cCgpICU+JQogIG11dGF0ZShuX3JlbCA9IG4gLyBuX1BZKSAlPiUKICBzZWxlY3QobGFiZWwsIFBZLCBuLCBuX3JlbCkgJT4lCiAgYXJyYW5nZShsYWJlbCwgUFkpICU+JSAKICBjb21wbGV0ZShsYWJlbCwgUFksIGZpbGwgPSBsaXN0KG4gPSAwLCBuX3JlbCA9IDApKSAlPiUKICBwbG90X3N1bW1hcnlfdGltZWxpbmUoeTEgPSBuLCB5MiA9IG5fcmVsLCB0ID0gUFksIHRfbWluID0gUFlfbWluLCB0X21heCA9IFBZX21heCwgYnkgPSBsYWJlbCwgbGFiZWwgPSBUUlVFLCBwYWwgPSBwYWxfcmEsCiAgICAgICAgICAgICAgICAgICAgICAgIHkxX3RleHQgPSAiTnVtYmVyIHB1YmxpY2F0aW9ucyBhbm51YWxseSIsIHkyX3RleHQgPSAiU2hhcmUgb2YgcHVibGljYXRpb25zIGFubnVhbGx5IikgKwogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9IHBhc3RlKCdSZXNlYXJjaCBBcmVhczonLCB2YXJfaW5zdCwgJ0ZpZWxkIGFyb3VuZCBEZXB0LicsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlKCdUaW1lZnJhbWU6JywgUFlfbWluLCAnLScsIFBZX21heCAsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAnQWJzb2x1dGUgcmVzZWFyY2ggYXJlYSBhcHBlYXJhbmNlIChsZWZ0KSwgUmVsYXRpdmUgcmVzZWFyY2ggYXJlYSBhcHBlYXJhbmNlIChyaWdodCknKQpgYGAKCiMjIFB1YmxpY2F0aW9ucyBieSBjbHVzdGVyCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KcmFfc3RhdHMgPC0gTV9iaWIgJT4lCiAgZHJvcF9uYShjb20pICU+JQogIGdyb3VwX2J5KGNvbSwgbGFiZWwpICU+JQogIHN1bW1hcmlzZShuID0gbigpLCBkZW5zaXR5X2ludCA9ICgoc3VtKGRncl9pbnQpIC8gKG4oKSAqIChuKCkgLSAxKSkpICogMTAwKSAlPiUgcm91bmQoMykpICU+JQogIHNlbGVjdChjb20sIGxhYmVsLCBldmVyeXRoaW5nKCkpCmBgYAoKYGBge3J9CnJhX3N1bSA8LSBNX2JpYiAlPiUgCiAgbGVmdF9qb2luKE0gJT4lIHNlbGVjdChVVCwgQVUsIFRJLCBUQywgREkpLCBieSA9ICdVVCcpICU+JQogIGdyb3VwX2J5KGxhYmVsKSAlPiUgCiAgbXV0YXRlKGRncl9zZWxlY3QgPSAoZGdyX2ludCAvIG1heChkZ3JfaW50KSAqIChUQyAvIG1heChUQykpKSApICU+JQogIHNsaWNlX21heChvcmRlcl9ieSA9IGRncl9zZWxlY3QsIG4gPSAxMCwgd2l0aF90aWVzID0gRkFMU0UpICU+JSAKICBtdXRhdGUoVENfeWVhciA9IChUQyAvICgyMDIxICsgMSAtIFBZKSkgJT4lIHJvdW5kKDIpLAogICAgICAgICBkZ3JfaW50ID0gZGdyX2ludCAlPiUgcm91bmQoMiksCiAgICAgICAgIEFVID0gQVUgJT4lIHN0cl90cnVuYygyNSksCiAgICAgICAgIFRJID0gVEkgJT4lIHN0cl90cnVuYygxMjUpICU+JSBwYXN0ZTAoIlsiLCAuICwgIl0oaHR0cHM6Ly9kb2kub3JnLyIsIERJLCAiKSIpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KEFVLCBQWSwgVEksIGRncl9pbnQsIFRDLCBUQ195ZWFyKSAlPiUKICBrYWJsZSgpCgoKZm9yKGkgaW4gMTpucm93KGNvbV9uYW1lc19iaWIpKXsKICByYV9zdW0gICU8PiUKICAgIHBhY2tfcm93cyhwYXN0ZTAoJ1Jlc2VhcmNoIEFyZWEgJywgaSwgJzogJywgY29tX25hbWVzX2JpYltpLCAnbGFiZWwnXSwKICAgICAgICAgICAgICAgICAgICAgJyAgIChuID0gJywgcmFfc3RhdHNbaSwgJ24nXSwgJywgZGVuc2l0eSA9JywgcmFfc3RhdHNbaSwgJ2RlbnNpdHlfaW50J10gJT4lIHJvdW5kKDIpLCAnKScgKSwgCiAgICAgICAgICAgICAgKGkqMTAtOSksICAoaSoxMCksIGxhYmVsX3Jvd19jc3MgPSAiYmFja2dyb3VuZC1jb2xvcjogIzY2NjsgY29sb3I6ICNmZmY7IikgCiAgfQoKcmFfc3VtICU+JSBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCBmb250X3NpemUgPSAxMCkKYGBgCgojIyBBdXRvbWF0ZWQgKExNTSkgc3VtbWFyeSAKCmBgYHtyfQpjb21fbGFiZWxzX1JBIDwtIGNvbV9sYWJlbHMgJT4lIGZpbHRlcih0eXBlID09ICdSQScpICU+JQogIG11dGF0ZShsYWJlbCA9IGxhYmVsICU+JSBzdHJfcmVwbGFjZSgnJicsICdhbmQnKSkgJT4lCiAgbXV0YXRlKGRlc2NyaXB0aW9uID0gCWRlc2NyaXB0aW9uICU+JSBzdHJfcmVwbGFjZSgnJicsICdhbmQnKSkKCmZvciAoaSBpbiAxOm5yb3coY29tX2xhYmVsc19SQSkpIHsjaT0xCiAgY29tX2xhYmVsc19uIDwtIGNvbV9sYWJlbHNfUkFbaSxdCiAgd3JpdGVMaW5lcyhwYXN0ZSgnTGFiZWw6JywgY29tX2xhYmVsc19uJGxhYmVsLCAnIFxuICcsCiAgICAgICAgJ0Rlc2NyaXB0aW9uOicsIGNvbV9sYWJlbHNfbiRkZXNjcmlwdGlvbiwgJyBcbiBcbiAnLAogICAgICAgIGNvbGxhcHNlID0gJyAnKSkKfQpgYGAKCiMjIEZ1cnRoZXIgQW5hbHlzaXMKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpnX2FnZyA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC9nX2JpYl9hZ2dfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAlTj4lCiAgYXJyYW5nZShjb20pICMgJT4lCiMgICBtdXRhdGUobmFtZSA9IG5hbWVzX3JhICU+JSBwdWxsKGNvbV9yYV9uYW1lKSwKIyAgICAgICAgICBjb2xvciA9IGNvbHNfcmEpCmBgYAoKYGBge3IsIGZpZy5oZWlnaHQ9IDcuNSwgZmlnLndpZHRoPTcuNX0KZ19hZ2cgJUU+JSAKICBmaWx0ZXIod2VpZ2h0ID4gMCAmIGZyb20gIT0gdG8pICU+JQogIGZpbHRlcih3ZWlnaHQgPj0gcXVhbnRpbGUod2VpZ2h0LCAwLjI1KSApICAlTj4lCiAgbXV0YXRlKGNvbSA9IGNvbV9uYW1lc19iaWIgJT4lIHB1bGwobGFiZWwpKSAlPiUKICBnZ3JhcGgobGF5b3V0ID0gImNpcmNsZSIpICsgCiAgZ2VvbV9lZGdlX2ZhbihzdHJlbmdodCA9IDAuOCwgYWVzKHdpZHRoID0gd2VpZ2h0KSwgYWxwaGEgPSAwLjIpICArIAogIGdlb21fbm9kZV9wb2ludChhZXMoc2l6ZSA9IE4sIGNvbG9yID0gY29tKSkgICsgCiAgZ2VvbV9ub2RlX3RleHQoYWVzKGxhYmVsID0gY29tKSwgcmVwZWwgPSBUUlVFKSArCiAgI3RoZW1lX2dyYXBoKGJhc2VfZmFtaWx5ID0gIkFyaWFsIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwyMCkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9IHBhbF9yYSkgKwogIGxhYnModGl0bGUgPSBwYXN0ZSgnUmVzZWFyY2ggQXJlYSBDb25uZWN0aXZpdHk6JywgdmFyX2luc3QsICdGaWVsZCBhcm91bmQgRGVwdC4nLCB2YXJfZGVwdCwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBwYXN0ZSgnVGltZWZyYW1lOicsIFBZX21pbiwgJy0nLCBQWV9tYXggLCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBjYXB0aW9uID0gJ05vZGVzID0gSWRlbnRpZmllZCBSZXNlYXJjaCBBcmVhczsgRWRnZXM6IEJpYmxpb2dyYXBoaWMgY291cGxpbmcgc3RyZW5naHQgKEphY2NhcmQgd2VpZ2h0ZWQpJykKYGBgCgojIE92ZXJhbCBpbnRlcnBsYXkKCiMjIEtub3dsZWRnZSBCYXNlcywgUmVzZWFyY2ggQXJlYXMgJiBUb3BpY3MgSW50ZXJhY3Rpb24KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIE5vZGVzCm5sXzNtIDwtIGNvbV9uYW1lc19iaWIgJT4lCiAgYmluZF9yb3dzKGNvbV9uYW1lc19jaXQpICU+JQogIGJpbmRfcm93cyhjb21fbmFtZXNfdG9wKSAlPiUKICByZW5hbWUobmFtZSA9IGxhYmVsLAogICAgICAgICBjb21fbnIgPSBjb20pICU+JQogIHJlbG9jYXRlKG5hbWUpCgojIEVkZ2VzCmVsXzJtX2tiIDwtIGVsXzJtICU+JQogIHNlbGVjdCgtZnJvbSwgLXRvKSAlPiUKICBpbm5lcl9qb2luKGNvbV9uYW1lc19jaXQgJT4lIHNlbGVjdChjb20sIGxhYmVsKSwgYnkgPSBjKCdjb21fY2l0JyA9ICdjb20nKSkgJT4lCiAgaW5uZXJfam9pbihjb21fbmFtZXNfYmliICU+JSBzZWxlY3QoY29tLCBsYWJlbCwgY29sKSwgYnkgPSBjKCdjb21fYmliJyA9ICdjb20nKSkgJT4lCiAgbXV0YXRlKHdlaWdodCA9IDEpICU+JQogIHJlbmFtZShmcm9tID0gbGFiZWwueCwKICAgICAgICAgdG8gPSBsYWJlbC55KSAlPiUgIyBnZW5lcmljCiAgc2VsZWN0KGZyb20sIHRvLCB3ZWlnaHQsIGNvbCkgJT4lIAogIGRyb3BfbmEoKSAlPiUgCiAgY291bnQoZnJvbSwgdG8sIGNvbCwgd3QgPSB3ZWlnaHQsIG5hbWUgPSAnd2VpZ2h0JykgJT4lCiAgZmlsdGVyKHBlcmNlbnRfcmFuayh3ZWlnaHQpID49IDAuMjUpICU+JQogIHdlaWdodF9qYWNjYXJkKGkgPSBmcm9tLCBqID0gdG8sIHcgPSB3ZWlnaHQpICU+JSAKICBzZWxlY3QoLXdlaWdodCkKCmVsXzJtX3RvcGljIDwtIE1fdG9wICU+JSBzZWxlY3QoVVQsIGxhYmVsKSAlPiUKICBsZWZ0X2pvaW4oTV9iaWIgJT4lIGRyb3BfbmEoY29tKSAlPiUgc2VsZWN0KFVULCBsYWJlbCwgY29sKSwgYnkgPSAnVVQnKSAlPiUKICByZW5hbWUoZnJvbSA9IGxhYmVsLnksCiAgICAgICAgIHRvID0gbGFiZWwueCkgJT4lICMgZ2VuZXJpYwogIHNlbGVjdChmcm9tLCB0bywgY29sKSAlPiUgCiAgZHJvcF9uYSgpICU+JSAKICBjb3VudChmcm9tLCB0bywgY29sLCAgbmFtZSA9ICd3ZWlnaHQnKSAlPiUKICBmaWx0ZXIocGVyY2VudF9yYW5rKHdlaWdodCkgPj0gMC4yNSkgJT4lCiAgd2VpZ2h0X2phY2NhcmQoaSA9IGZyb20sIGogPSB0bywgdyA9IHdlaWdodCkgJT4lIHNlbGVjdCgtd2VpZ2h0KQoKIyBncmFwaApnXzNtIDwtIGVsXzJtX2tiICU+JSAKICBiaW5kX3Jvd3MoZWxfMm1fdG9waWMpICU+JQogIGFzX3RibF9ncmFwaChkaXJlY3RlZCA9IFRSVUUpICVOPiUKICBsZWZ0X2pvaW4obmxfM20sIGJ5ID0gJ25hbWUnKSAlPiUKICBtdXRhdGUoCiAgICBsZXZlbCA9IGNhc2Vfd2hlbigKICAgICAgdHlwZSA9PSAiS0IiIH4gMSwKICAgICAgdHlwZSA9PSAiUkEiIH4gMiwKICAgICAgdHlwZSA9PSAiVFAiIH4gMyksCiAgICBjb29yZF95ID0gMC4xLAogICAgY29vcmRfeCA9IDAuMDAxICsgMS8obWF4KGxldmVsKS0xKSAqIChsZXZlbC0xKQogICAgKSAgJU4+JQogIGZpbHRlcighaXMubmEobGV2ZWwpKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIyBCdWlsZCBzYW5rZXkgcGxvdApmaWcgPC0gcGxvdF9seSh0eXBlID0gInNhbmtleSIsIAogICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9ICJoIiwKICAgICAgICAgICAgICAgYXJyYW5nZW1lbnQgPSAic25hcCIsCiAgbm9kZSA9IGxpc3QoCiAgICBsYWJlbCA9IGdfM20gJU4+JSBhc190aWJibGUoKSAlPiUgcHVsbChuYW1lKSwKICAgIHggPSBnXzNtICVOPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwoY29vcmRfeCksCiAgICB5ID0gZ18zbSAlTj4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKGNvb3JkX3kpLAogICAgY29sb3IgPSBnXzNtICVOPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwoY29sKSwgCiAgICBwYWQgPSA0CiAgKSwgCiAgbGluayA9IGxpc3QoCiAgICBzb3VyY2UgPSAoZ18zbSAlRT4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKGZyb20pKSAtMSwKICAgIHRhcmdldCA9IChnXzNtICVFPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwodG8pKSAtMSwKICAgIHZhbHVlID0gIGdfM20gJUU+JSBhc190aWJibGUoKSAlPiUgcHVsbCh3ZWlnaHRfamFjKSwKICAgIGNvbG9yID0gZ18zbSAlRT4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKGNvbCkgJT4lIGNvbDJyZ2IoKSAlPiUgYXMubWF0cml4KCkgJT4lIHQoKSAlPiUgYXNfdGliYmxlKCkgJT4lIAogICAgICBtdXRhdGUoY29sX3JnYiA9IHBhc3RlMCgncmdiYSgnLCByZWQsICcsJyAsIGdyZWVuLCAnLCcsIGJsdWUsICcsMC43NSknKSkgJT4lICBwdWxsKGNvbF9yZ2IpCiAgICApCikgJT4lIAogIGxheW91dCh0aXRsZSA9IHBhc3RlKCdLbm93bGVkZ2UgQmFzZXMsIFJlc2VhcmNoIEFyZWFzICYgVG9waWNzOicsIHZhcl9pbnN0LCAnRmllbGQgYXJvdW5kICcsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICBtYXJnaW4gPSBsaXN0KGwgPSA1MCwgciA9IDUwLCBiID0gMTAwLCB0ID0gMTAwLCBwYWQgPSAyKSkgCmBgYAoKCiMjIEpvaW50IE92ZXJ2aWV3IG92ZXIgS25vd2xlZGdlIEJhc2VzLCBSZXNlYXJjaCBBcmVhcywgYW5kIFRvcGljcwoKVGhpcyBwbG90IHNob3dzIHRoZSBjb25uZWN0aW9uIG9mIHB1YmxpY2F0aW9ucyBpbiB0aGUgcmVzZWFyY2ggYXJlYXMgdG8ga25vd2xlZGdlIGJhc2VzIChieSBjaXRhdGlvbnMpIGFuZCB0b3BpY3MgKGJ5IGdhbW1hLCBkb2N1bWVudC10b3BpYyB3ZWlnaHQpCgpgYGB7ciwgZmlnLmhlaWdodD0gMTAsIGZpZy53aWR0aD0xNX0KZmlnCmBgYAoKCjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBORVhUIFBBUlQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0Kcm0odGV4dF90aWR5LCB0ZXh0X2xkYSkKYGBgCgoKCgojIENvbGxhYm9yYXRpb24gCgpgYGB7cn0KZWxfaW5zdCA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC9lbF9pbnN0XycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgoKYGBge3J9CmdfaW5zdCA8LSBlbF9pbnN0ICU+JSBhc190YmxfZ3JhcGgoZGlyZWN0ZWQgPSBGQUxTRSkgJUU+JQogIGZpbHRlcih3ZWlnaHQgPj0gY3V0b2ZfZWRnZV9jaXQgKSAlTj4lCiAgZmlsdGVyKCFub2RlX2lzX2lzb2xhdGVkKCkpCmBgYAoKIyMgQ29sbGFib3JhdGlvbiBuZXR3b3JrIAoKYGBge3IsIGZpZy5oZWlnaHQ9IDEwLCBmaWcud2lkdGg9MTV9CiMgZ2V0IGJpZ2dlc3QgY29tcG9uZW50CmNvbXBvbmVudHMgPC0gY2x1c3RlcnMoZ19pbnN0LCBtb2RlPSJ3ZWFrIikKYmlnZ2VzdF9jbHVzdGVyX2lkIDwtIHdoaWNoLm1heChjb21wb25lbnRzJGNzaXplKQp2ZXJ0X2lkcyA8LSBWKGdfaW5zdClbY29tcG9uZW50cyRtZW1iZXJzaGlwID09IGJpZ2dlc3RfY2x1c3Rlcl9pZF0KaWdyYXBoOjppbmR1Y2VkX3N1YmdyYXBoKGdfaW5zdCwgdmVydF9pZHMpCgpnX2luc3QgJU4+JSAKICBtdXRhdGUoY2VudCA9IGNlbnRyYWxpdHlfZGVncmVlKHdlaWdodHMgPSB3ZWlnaHQpKSAlPiUKICBmaWx0ZXIobmFtZSA9PSBwYXN0ZSh2YXJfaW5zdCwgdmFyX2RlcHQpICB8IHJhbmsoLWNlbnQpIDw9IDEwMCApICU+JQogIGdncmFwaChsYXlvdXQgPSAiZnIiKSArIAogIGdlb21fZWRnZV9saW5rKGFlcyh3aWR0aCA9IHdlaWdodCwKICAgICAgICAgICAgICAgICAgICAgI2NvbG9yID0gLk4oKSRuYW1lW2Zyb21dID09IHBhc3RlKHZhcl9pbnN0LCB2YXJfZGVwdCkgfCAuTigpJG5hbWVbZnJvbV0gPT0gcGFzdGUodmFyX2luc3QsIHZhcl9kZXB0KSwKICAgICAgICAgICAgICAgICAgICAgI2ZpbHRlciA9ICh3ZWlnaHQgPj0gd2VpZ2h0ICAlPiUgcXVhbnRpbGUoMC4wMSkpCiAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAsIGFscGhhID0gMC4yNSkgICsgCiAgZ2VvbV9ub2RlX3BvaW50KGFlcyhzaXplID0gY2VudCksIGNvbCA9ICdzdGVlbGJsdWUxJykgICsgCiAgZ2VvbV9ub2RlX3RleHQoYWVzKGxhYmVsID0gbmFtZSwgCiAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBjZW50LAogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAoY2VudCA+PSBjZW50ICAlPiUgcXVhbnRpbGUoMC4yNSkpKSwgcmVwZWwgPSBUUlVFKSArCiAgI3RoZW1lX2dyYXBoKGJhc2VfZmFtaWx5ID0gIkFyaWFsIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArCiAgc2NhbGVfZWRnZV93aWR0aF9jb250aW51b3VzKHJhbmdlID0gYygwLjUsIDUpKSAgKwogIHNjYWxlX2VkZ2VfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBjKCJncmV5IiwgInJlZCIpLCBuYW1lID0gJzFzdCBkZWdyZWUnKSArCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMC41LDEwKSkgCmBgYAoKCiMgRW5kbm90ZXMKCmBgYHtyfQpzZXNzaW9uSW5mbygpCmBgYAo=